package org.freelancer.app.dao;


import java.util.List;

import org.freelancer.app.dto.ClientesDto;
import org.freelancer.app.models.Clientes;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;

public class ClientesDao extends HibernateUtil {

	private Session sess=HibernateUtil.buildSessionFactory().openSession();
	
	
	public ClientesDao() {

	}
	public void guardarclientesdao(ClientesDto clientesdto){
		try{ 	 	
			sess.beginTransaction();
			Clientes clientes=new Clientes();
			clientes.setId(clientesdto.getId());
			clientes.setUsuario(clientesdto.getUsuario());
			clientes.setCorreo(clientesdto.getCorreo());
			clientes.setTipodetarjeta(clientesdto.getTipodetarjeta());
			clientes.setNumerodetarjeta(clientesdto.getNumerodetarjeta());
			clientes.setVencimientodetarjeta(clientesdto.getVencimientodetarjeta());
			sess.save(clientes);
		    sess.getTransaction().commit();
			}catch(Exception exp){
				System.out.println("exception on guardarclientesdao "+exp.getMessage());
			}
	}
	public void actualizarviacampo(String us, ClientesDto clientesdto){
		try{
			sess.beginTransaction();
			Clientes clientes = (Clientes )sess.createCriteria(Clientes.class)
                    .add(Restrictions.eq("usuario", us)).uniqueResult();
			//clientes.setId(clientesdto.getId());
			clientes.setCorreo(clientesdto.getCorreo());
			clientes.setTipodetarjeta(clientesdto.getTipodetarjeta());
			clientes.setNumerodetarjeta(clientesdto.getNumerodetarjeta());
			clientes.setVencimientodetarjeta(clientesdto.getVencimientodetarjeta());
            sess.update(clientes);
		sess.getTransaction().commit();
		}catch(Exception exp){
			System.out.println("exception on actualizando registro "+exp.getMessage());
		}
	}
	public void eliminarcliente(String us){
		try{
			sess.beginTransaction();
			Clientes clientes = (Clientes ) sess.createCriteria(Clientes.class)
                    .add(Restrictions.eq("usuario", us)).uniqueResult();
            sess.delete(clientes);
		sess.getTransaction().commit();
		}catch(Exception e){
			System.out.println("exception on eliminando registro "+e.getMessage());
		}
	}
	
	
	
	
	
	
	
	public List<Clientes> obtenerclientesporcampo(String usr){
		Criteria criteria = sess.createCriteria(Clientes.class);
		criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
		criteria.setProjection(Projections.property(usr));
		
		return criteria.list();
	}
	public List<Clientes> obtenertodosclientes(){
		Criteria criteria = sess.createCriteria(Clientes.class);
		return criteria.list();
	}
	
	public int count(){
		Criteria criteria = sess.createCriteria(Clientes.class);
		criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
		criteria.setProjection(Projections.property("usuario"));
		
		return criteria.list().size();
	}
	
	
	
	
	
	
	public void actualizarclientes(ClientesDto clientesdto, Long id){
		try{ 	
		sess.beginTransaction();
		Clientes clientes=(Clientes)sess.get(Clientes.class, id);
		clientes.setId(clientesdto.getId());
		clientes.setUsuario(clientesdto.getUsuario());
		clientes.setCorreo(clientesdto.getCorreo());
		sess.update(clientes);
		sess.getTransaction().commit();
	}catch(Exception exp){
		System.out.println("exception on actualizando registro "+exp.getMessage());
	}
	}
	
	
	
	
	
	
}
